home *** CD-ROM | disk | FTP | other *** search
- unit uOptions;
-
- {
- *******************************************************************************
- * Descriptions: Main Unit for FMA
- * $Source: /cvsroot/fma/fma/uOptions.pas,v $
- * $Locker: $
- *
- * Todo:
- *
- * Change Log:
- * $Log: uOptions.pas,v $
- * Revision 1.32.6.3 2005/01/25 16:03:19 z_stoichev
- * Merged with 2.1 Beta 1 bugfixes
- *
- * Revision 1.32.6.2 2004/10/15 11:27:59 z_stoichev
- * Bugfixes
- *
- * Revision 1.32.6.1 2004/10/14 16:43:28 z_stoichev
- * Bugfixes
- *
- * Revision 1.32 2004/07/26 12:53:48 z_stoichev
- * - Fixed Outlook contacts folders Factory defaults.
- * - Changed Options IrmcSync sanity check and user interface.
- * - Added Force UCS-2 new text message encoding.
- *
- * Revision 1.31 2004/07/25 14:40:03 lordlarry
- * Fixed: Different Outlook Categories where seen as one Category. Users need to setup Categories again.
- *
- * Revision 1.30 2004/07/25 13:30:37 lordlarry
- * Added the ability to select the Outlook folder where all the New contacts end up.
- *
- * Revision 1.29 2004/07/01 09:12:19 z_stoichev
- * - Fixed Startup options Factory default.
- * - Fixed Outlook Folders small icons were bad.
- * - Added Outlook Folders Refresh and Default buttons.
- *
- * Revision 1.28 2004/06/30 15:39:04 z_stoichev
- * GUI changes.
- *
- * Revision 1.27 2004/06/29 20:10:18 lordlarry
- * Using BeginUpdate EndUpdate for Outlook Folders
- *
- * Revision 1.26 2004/06/29 12:37:11 z_stoichev
- * New message window renamed
- *
- * Revision 1.25 2004/06/28 16:05:25 z_stoichev
- * Outlook Categories Quoted.
- *
- * Revision 1.24 2004/06/28 15:25:05 z_stoichev
- * Outlook Categories recoded.
- *
- * Revision 1.23 2004/06/25 15:20:38 z_stoichev
- * - Added Various phone bookmarks options.
- * - Added Factory defaults buttons in options.
- * - Changed Made Script usage optional.
- *
- * Revision 1.22 2004/06/16 08:48:12 z_stoichev
- * Added Device Lookup button in Options.
- *
- * Revision 1.21 2004/06/15 13:00:01 z_stoichev
- * Load Outlook folders on need only.
- *
- * Revision 1.20 2004/06/11 12:29:22 z_stoichev
- * Options windows enlarged.
- * Outlook folders icons usage.
- * Show current SMS counter.
- *
- * Revision 1.19 2004/06/05 13:32:55 lordlarry
- * Merged with OutlookSync branch
- *
- * Revision 1.18 2004/05/21 10:09:05 z_stoichev
- * Changed logging handle routines.
- *
- * Revision 1.17 2004/05/19 18:34:16 z_stoichev
- * Build 0.1.0.35c
- *
- * Revision 1.16 2004/03/26 18:37:40 z_stoichev
- * Build 0.1.0.35 RC5
- *
- * Revision 1.15 2004/03/14 18:47:38 z_stoichev
- * Remember Last User Profile option.
- *
- * Revision 1.14 2004/03/08 12:21:29 z_stoichev
- * Access serial port by name.
- *
- * Revision 1.13 2004/01/15 14:13:56 z_stoichev
- * Added SMS Counter and Warning level.
- *
- * Revision 1.12 2004/01/14 15:04:59 z_stoichev
- * Pascal Scripting support.
- *
- * Revision 1.11 2003/12/17 17:15:22 z_stoichev
- * Added Option to turn off notifications for unsent messages.
- *
- * Revision 1.10 2003/12/12 16:55:36 z_stoichev
- * Added options for do not load Calls and Profiles on connect.
- *
- * Revision 1.9 2003/11/28 09:38:07 z_stoichev
- * Merged with branch-release-1-1 (Fma 0.10.28c)
- *
- * Revision 1.8.2.8 2003/11/21 10:59:46 z_stoichev
- * Tab order fixed, GUI changes.
- * Outlook and other preparations.
- * Test proximity caption change.
- *
- * Revision 1.8.2.7 2003/11/12 15:02:11 z_stoichev
- * Proximity detection options changed.
- *
- * Revision 1.8.2.6 2003/11/11 13:12:51 z_stoichev
- * New options introduced.
- *
- * Revision 1.8.2.5 2003/11/10 14:03:10 z_stoichev
- * RC3
- *
- * Revision 1.8.2.4 2003/10/31 14:50:33 z_stoichev
- * Proximity preparations.
- *
- * Revision 1.8.2.3 2003/10/29 12:02:43 z_stoichev
- * Options to disable Obex, IrmcSync and to
- * disable initial loading of Gruops and Folders.
- *
- * Revision 1.8.2.2 2003/10/28 12:59:38 z_stoichev
- * Added option to select clock sync mode.
- * Some GUI changes, added some texts.
- * Prepare for protocol advanced options.
- *
- * Revision 1.8.2.1 2003/10/27 07:22:54 z_stoichev
- * Build 0.1.0 RC1 Initial Checkin.
- *
- * Revision 1.8 2003/10/22 13:18:09 z_stoichev
- * Add checkbox for Progress dialog usage.
- * Add checkbox for Show progress dialog on long operations.
- * Add checkbox for Move SMS to Archive warning.
- * GUI changed.
- *
- * Revision 1.7 2003/10/17 09:14:59 z_stoichev
- * Default Obex packet size set to 255 (by specs).
- * Added header comments.
- * Changed GUI.
- *
- *
- * 04/02/2003 - Modified by Crino
- * Added the synchronize option
- * General tab renamed in Window
- *
- *******************************************************************************
- }
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls, RXSpin, ComCtrls, Placemnt, ExtCtrls, Spin,
- TntStdCtrls, Mask, CPortCtl, VirtualTrees, Outlook8, ImgList,
- WIrCOMMSocket, WSocket, WBluetoothSocket, PBFolderDialog, TntComCtrls,
- Menus;
-
- type
- TfrmOptions = class(TForm)
- PageControl1: TPageControl;
- Button1: TButton;
- Button2: TButton;
- TabSheet1: TTabSheet;
- TabSheet2: TTabSheet;
- TabSheet3: TTabSheet;
- cbObexPacketSize: TGroupBox;
- seMaxPacketSize: TEdit;
- seMaxPacketSizeSpin: TUpDown;
- lblObexPacketSize: TLabel;
- GroupBox3: TGroupBox;
- Label11: TLabel;
- seCommTimeout: TEdit;
- seCommTimeoutSpin: TUpDown;
- GroupBox4: TGroupBox;
- sePolling: TEdit;
- sePollingSpin: TUpDown;
- Label5: TLabel;
- TabSheet4: TTabSheet;
- OpenDialog1: TOpenDialog;
- TabSheet6: TTabSheet;
- GroupBox5: TGroupBox;
- Label19: TLabel;
- Label20: TLabel;
- chkCallM: TCheckBox;
- TabSheet5: TTabSheet;
- rbSync: TRadioGroup;
- GroupBox7: TGroupBox;
- chkMinButton: TCheckBox;
- TabSheet7: TTabSheet;
- GroupBox9: TGroupBox;
- cbStrictUCScheck: TCheckBox;
- TabSheet8: TTabSheet;
- GroupBox8: TGroupBox;
- cbProgressLongOnly: TCheckBox;
- cbDontProgress: TCheckBox;
- rbPhoneClockSync: TRadioGroup;
- TntLabel1: TTntLabel;
- TabSheet9: TTabSheet;
- GroupBox2: TGroupBox;
- cbProximityLock: TCheckBox;
- cbProximityUnlock: TCheckBox;
- Label24: TLabel;
- Label25: TLabel;
- rgProximityAway: TRadioGroup;
- rgProximityNear: TRadioGroup;
- cbRunSS: TCheckBox;
- GroupBox12: TGroupBox;
- edScriptPath: TTntEdit;
- Button3: TButton;
- Label4: TLabel;
- cbProgressRestoredOnly: TCheckBox;
- btnProximityTest: TButton;
- cbCheckOutbox: TCheckBox;
- TabSheet10: TTabSheet;
- rbOutlookSync: TRadioGroup;
- grOutlookConfirmation: TGroupBox;
- cbConfirmAdding: TCheckBox;
- cbConfirmUpdating: TCheckBox;
- cbConfirmDeleting: TCheckBox;
- grOutlookCategories: TGroupBox;
- cbOutlookAllCategories: TCheckBox;
- btAddCat: TButton;
- btDelCat: TButton;
- rbOutlookNewAction: TRadioGroup;
- TabSheet11: TTabSheet;
- CheckBox3: TCheckBox;
- OutlookImageList: TImageList;
- GroupBox14: TGroupBox;
- tvOutlookFolders: TVirtualStringTree;
- WBtSocket: TWBluetoothSocket;
- WIrSocket: TWIrCOMMSocket;
- GroupBox15: TGroupBox;
- Label30: TLabel;
- edBookmarkDir: TEdit;
- btnSelectFavBookm: TButton;
- rbBookmarks: TRadioGroup;
- Label31: TLabel;
- PBFolderDialog1: TPBFolderDialog;
- GroupBox16: TGroupBox;
- cbDiagram: TCheckBox;
- chkStateMonitor: TCheckBox;
- TabSheet12: TTabSheet;
- gbOnConnected: TGroupBox;
- cbAutoInbox: TCheckBox;
- cbAutoSync: TCheckBox;
- cbAutoOutlookSync: TCheckBox;
- cbAutoProfile: TCheckBox;
- cbAutoBookmarks: TCheckBox;
- gbOnConnecting: TGroupBox;
- cbNoGroups: TCheckBox;
- cbNoFolders: TCheckBox;
- cbNoProfiles: TCheckBox;
- cbNoCalls: TCheckBox;
- cbNoBookmarks: TCheckBox;
- rgExplorer: TRadioGroup;
- GroupBox1: TGroupBox;
- Label3: TLabel;
- Label16: TLabel;
- Label17: TLabel;
- Label18: TLabel;
- Label26: TLabel;
- seComposeSpin: TUpDown;
- seCompose: TEdit;
- seMessage: TEdit;
- seMessageSpin: TUpDown;
- seCall: TEdit;
- seCallSpin: TUpDown;
- seDebug: TEdit;
- seDebugSpin: TUpDown;
- Button4: TButton;
- GroupBox13: TGroupBox;
- Label28: TLabel;
- lblSMSCount: TLabel;
- cbSMSWarning: TCheckBox;
- udSMSCnt: TUpDown;
- edSMSCnt: TEdit;
- cbSMSReset: TCheckBox;
- udSMSCntRst: TUpDown;
- edSMSCntRst: TEdit;
- Button6: TButton;
- GroupBox10: TGroupBox;
- cbNoObex: TCheckBox;
- cbNoIRMC: TCheckBox;
- CheckBox1: TCheckBox;
- Button7: TButton;
- Button9: TButton;
- lvOutlookCats: TTntListView;
- GroupBox17: TGroupBox;
- rbUseIRDA: TRadioButton;
- rbUseSerial: TRadioButton;
- groupSerialPortSetup: TGroupBox;
- Label6: TLabel;
- Label7: TLabel;
- Label2: TLabel;
- Label1: TLabel;
- Label8: TLabel;
- cbRTSFlow: TComboBox;
- cbDTRFlow: TComboBox;
- sePort: TComComboBox;
- cbBaudrate: TComComboBox;
- groupBluetoothSetup: TGroupBox;
- Label13: TLabel;
- Label14: TLabel;
- Label15: TLabel;
- edBTAddress: TMaskEdit;
- edBTPort: TEdit;
- edBTPortSpin: TUpDown;
- rbUseBluetooth: TRadioButton;
- lblDevice: TLabel;
- btnLookupDevice: TButton;
- Button5: TButton;
- Label21: TLabel;
- Edit1: TEdit;
- UpDown1: TUpDown;
- GroupBox18: TGroupBox;
- chkMsgM: TCheckBox;
- cbMsgToArchive: TCheckBox;
- cbMsgFullWarning: TCheckBox;
- GroupBox19: TGroupBox;
- Label23: TLabel;
- lbScriptType: TLabel;
- Label9: TLabel;
- Label10: TLabel;
- Label12: TLabel;
- Button10: TButton;
- cbUseScripts: TCheckBox;
- Button8: TButton;
- GroupBox20: TGroupBox;
- CheckBox6: TCheckBox;
- Label22: TLabel;
- Edit2: TEdit;
- Button11: TButton;
- CheckBox2: TCheckBox;
- CheckBox4: TCheckBox;
- cbNoMsgBaloon: TCheckBox;
- cbNoMsgPopup: TCheckBox;
- Label27: TLabel;
- btnRefreshOutlookFolders: TButton;
- Button12: TButton;
- pmuOutlookFolder: TPopupMenu;
- mniNewContacts: TMenuItem;
- Label29: TLabel;
- cbForceUCS2: TCheckBox;
- procedure edScriptPathChange(Sender: TObject);
- procedure Button3Click(Sender: TObject);
- procedure FormShow(Sender: TObject);
- procedure rbUseSerialClick(Sender: TObject);
- procedure cbDontProgressClick(Sender: TObject);
- procedure cbNoObexClick(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure Button1Click(Sender: TObject);
- procedure Button4Click(Sender: TObject);
- procedure chkMsgMClick(Sender: TObject);
- procedure btnProximityTestClick(Sender: TObject);
- procedure Button6Click(Sender: TObject);
- procedure cbOutlookAllCategoriesClick(Sender: TObject);
- procedure btAddCatClick(Sender: TObject);
- procedure btDelCatClick(Sender: TObject);
- procedure tvOutlookFoldersFreeNode(Sender: TBaseVirtualTree;
- Node: PVirtualNode);
- procedure tvOutlookFoldersGetText(Sender: TBaseVirtualTree;
- Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
- var CellText: WideString);
- procedure tvOutlookFoldersInitChildren(Sender: TBaseVirtualTree;
- Node: PVirtualNode; var ChildCount: Cardinal);
- procedure tvOutlookFoldersInitNode(Sender: TBaseVirtualTree;
- ParentNode, Node: PVirtualNode;
- var InitialStates: TVirtualNodeInitStates);
- procedure FormDestroy(Sender: TObject);
- procedure cbNoProfilesClick(Sender: TObject);
- procedure chkStateMonitorClick(Sender: TObject);
- procedure tvOutlookFoldersGetImageIndex(Sender: TBaseVirtualTree;
- Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
- var Ghosted: Boolean; var ImageIndex: Integer);
- procedure PageControl1Change(Sender: TObject);
- procedure btnLookupDeviceClick(Sender: TObject);
- procedure btnSelectFavBookmClick(Sender: TObject);
- procedure rbBookmarksClick(Sender: TObject);
- procedure cbNoBookmarksClick(Sender: TObject);
- procedure Button5Click(Sender: TObject);
- procedure Button7Click(Sender: TObject);
- procedure Button8Click(Sender: TObject);
- procedure Button9Click(Sender: TObject);
- procedure lvOutlookCatsSelectItem(Sender: TObject; Item: TListItem;
- Selected: Boolean);
- procedure Button10Click(Sender: TObject);
- procedure cbAutoBookmarksClick(Sender: TObject);
- procedure btnRefreshOutlookFoldersClick(Sender: TObject);
- procedure Button12Click(Sender: TObject);
- procedure tvOutlookFoldersPaintText(Sender: TBaseVirtualTree;
- const TargetCanvas: TCanvas; Node: PVirtualNode;
- Column: TColumnIndex; TextType: TVSTTextType);
- procedure mniNewContactsClick(Sender: TObject);
- procedure pmuOutlookFolderPopup(Sender: TObject);
- procedure tvOutlookFoldersChecked(Sender: TBaseVirtualTree;
- Node: PVirtualNode);
- procedure cbNoIRMCClick(Sender: TObject);
- private
- Outlook: OutlookApplication;
- NmSpace: NameSpace;
- FSelectedOutlookFolders: TStringList;
- FOutlookNewContactsFolder: String;
- OutlookNewContactsNode, NewOutlookNewContactsNode: PVirtualNode;
-
- procedure SanityCheck;
- procedure ReadOutlookFolders;
- procedure LoadSelectedOutlookFolder(Sender: TBaseVirtualTree;
- Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
- procedure LoadOutlookNewContactsFolder(Sender: TBaseVirtualTree;
- Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
- procedure PickDefaultOutlookNewContactsFolder(Sender: TBaseVirtualTree;
- Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
- procedure SaveSelectedOutlookFolder(Sender: TBaseVirtualTree;
- Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
- function Get_SelectedOutlookFolders: String;
- procedure Set_SelectedOutlookFolders(const Value: String);
- function Get_OutlookCategories: WideString;
- procedure Set_OutlookCategories(const Value: WideString);
- procedure SetOutlookNewContactsFolder(const Value: String);
- function GetOutlookNewContactsFolder: String;
- procedure SetupNewContactsFolder;
- public
- connectionType: Integer;
- property SelectedOutlookFolders: String read Get_SelectedOutlookFolders write Set_SelectedOutlookFolders;
- property OutlookCategories: WideString read Get_OutlookCategories write Set_OutlookCategories;
- property OutlookNewContactsFolder: String read GetOutlookNewContactsFolder write SetOutlookNewContactsFolder;
- end;
-
- var
- frmOptions: TfrmOptions;
-
- implementation
-
- uses WinSock, Unit1, uComposeSMS, uStatusDlg, uGlobal, uInputQuery;
-
- {$R *.dfm}
-
- type
- TOutlookFolder = record
- Folder: MAPIFolder;
- NewContacts: Boolean;
- end;
- POutlookFolder = ^TOutlookFolder;
-
- procedure TfrmOptions.edScriptPathChange(Sender: TObject);
- begin
- lbScriptType.Caption := LowerCase(ExtractFileExt(edScriptPath.Text));
- lbScriptType.Caption := Copy(lbScriptType.Caption, 2, length(lbScriptType.Caption));
- end;
-
- procedure TfrmOptions.Button3Click(Sender: TObject);
- begin
- OpenDialog1.InitialDir := ExtractFileDir(edScriptPath.Text);
- OpenDialog1.FileName := ExtractFileName(edScriptPath.Text);
- if OpenDialog1.Execute then
- edScriptPath.Text := OpenDialog1.FileName;
- end;
-
- procedure TfrmOptions.FormShow(Sender: TObject);
- begin
- edScriptPathChange(nil);
- case connectionType of
- 0: rbUseSerialClick(rbUseBluetooth);
- 1: rbUseSerialClick(rbUseIRDA);
- 2: rbUseSerialClick(rbUseSerial);
- end;
- PageControl1.ActivePageIndex := 0;
- cbOutlookAllCategoriesClick(Self);
- lblSMSCount.Caption := 'Messages sent so far: '+IntToStr(Form1.FSMSCounter);
- lblDevice.Caption := '';
- rbBookmarksClick(nil);
- end;
-
- procedure TfrmOptions.rbUseSerialClick(Sender: TObject);
- begin
- if not (Sender as TRadioButton).Checked then
- (Sender as TRadioButton).Checked := True;
-
- case (Sender as TRadioButton).Tag of
- 0:
- begin
- groupBluetoothSetup.Enabled := True;
- groupSerialPortSetup.Enabled := False;
- end;
- 1:
- begin
- groupBluetoothSetup.Enabled := False;
- groupSerialPortSetup.Enabled := False;
- end;
- 2:
- begin
- groupBluetoothSetup.Enabled := False;
- groupSerialPortSetup.Enabled := True;
- end;
- end;
-
- connectionType := (Sender as TRadioButton).Tag;
- btnLookupDevice.Enabled := not rbUseSerial.Checked or Form1.FConnected;
- lblDevice.Caption := '';
- end;
-
- procedure TfrmOptions.cbDontProgressClick(Sender: TObject);
- begin
- cbProgressLongOnly.Enabled := not cbDontProgress.Checked;
- cbProgressRestoredOnly.Enabled := not cbDontProgress.Checked;
- end;
-
- procedure TfrmOptions.cbNoObexClick(Sender: TObject);
- begin
- if cbNoObex.Checked then begin
- { If no obex, disable other as well }
- if not cbNoIRMC.Checked then begin
- MessageBeep(MB_ICONASTERISK);
- MessageDlg('Phonebook IRMC synchronization uses ObEx protocol, so this feature will be disabled as well!',
- mtInformation,[mbOk],0);
- end;
- cbNoIRMC.Checked := True;
- if not cbNoFolders.Checked then begin
- MessageBeep(MB_ICONASTERISK);
- MessageDlg('Phone folders browseing uses ObEx protocol, so this feature will be disabled (see Startup page)!',
- mtInformation,[mbOk],0);
- end;
- cbNoFolders.Checked := True;
- {}
- cbNoIRMC.Enabled := False;
- cbNoFolders.Enabled := False;
- rbSync.Enabled := False;
- cbObexPacketSize.Enabled := False;
- lblObexPacketSize.Enabled := False;
- end
- else begin
- cbNoIRMC.Enabled := True;
- cbNoFolders.Enabled := True;
- rbSync.Enabled := True;
- cbObexPacketSize.Enabled := True;
- lblObexPacketSize.Enabled := True;
- end;
- end;
-
- procedure TfrmOptions.ReadOutlookFolders;
- begin
- tvOutlookFolders.NodeDataSize := SizeOf(TOutlookFolder);
- tvOutlookFolders.RootNodeCount := NmSpace.Folders.Count;
- end;
-
- procedure TfrmOptions.FormCreate(Sender: TObject);
- begin
- {$IFNDEF VER150}
- Form1.ThemeManager1.CollectForms(Self);
- {$ENDIF}
- { Make important widgets bold }
- Label24.Font.Style := [fsBold];
- Label25.Font.Style := [fsBold];
- lbScriptType.Font.Style := [fsBold];
- rbUseBluetooth.Font.Style := [fsBold];
- rbUseIRDA.Font.Style := [fsBold];
- rbUseSerial.Font.Style := [fsBold];
- lblSMSCount.Font.Style := [fsBold];
- FSelectedOutlookFolders := TStringList.Create;
- end;
-
- procedure TfrmOptions.Button1Click(Sender: TObject);
- begin
- SanityCheck;
- ModalResult := mrOk;
- end;
-
- procedure TfrmOptions.Button4Click(Sender: TObject);
- begin
- seComposeSpin.Position := 200;
- seMessageSpin.Position := 200;
- seCallSpin.Position := 200;
- seDebugSpin.Position := 200;
- end;
-
- procedure TfrmOptions.chkMsgMClick(Sender: TObject);
- begin
- cbNoMsgPopup.Enabled := chkMsgM.Checked;
- cbNoMsgBaloon.Enabled := chkMsgM.Checked;
- cbMsgToArchive.Enabled := chkMsgM.Checked;
- cbMsgFullWarning.Enabled := chkMsgM.Checked;
- end;
-
- procedure TfrmOptions.btnProximityTestClick(Sender: TObject);
- begin
- SanityCheck;
- btnProximityTest.Enabled := False;
- btnProximityTest.Caption := 'Testing...';
- try
- Form1.DoProximityTest;
- finally
- btnProximityTest.Enabled := True;
- btnProximityTest.Caption := 'Test Proximity';
- end;
- end;
-
- procedure TfrmOptions.SanityCheck;
- begin
- if (rgProximityAway.ItemIndex = rgProximityNear.ItemIndex) and (rgProximityAway.ItemIndex <> 4) then
- raise Exception.Create('Proximity settings cannot match for Away and Near');
- end;
-
- procedure TfrmOptions.Button6Click(Sender: TObject);
- begin
- Form1.FSMSCounter := 0;
- Form1.FSMSCounterReseted := True;
- if frmMessageContact.Visible then
- frmMessageContact.FormActivate(frmMessageContact);
- lblSMSCount.Caption := 'Messages sent so far: '+IntToStr(Form1.FSMSCounter);
- end;
-
- procedure TfrmOptions.cbOutlookAllCategoriesClick(Sender: TObject);
- begin
- lvOutlookCats.Enabled := not cbOutlookAllCategories.Checked;
- if lvOutlookCats.Enabled then
- lvOutlookCats.Color := clWindow
- else
- lvOutlookCats.Color := clBtnFace;
- btAddCat.Enabled := lvOutlookCats.Enabled;
- btDelCat.Enabled := lvOutlookCats.Enabled and
- (lvOutlookCats.SelCount <> 0);
- end;
-
- procedure TfrmOptions.btAddCatClick(Sender: TObject);
- var
- s: WideString;
- begin
- s := '';
- if WideInputQuery('Add Category...','Enter category name:',s) then
- with lvOutlookCats.Items.Add do begin
- Caption := Trim(s);
- ImageIndex := 0;
- end;
- end;
-
- procedure TfrmOptions.btDelCatClick(Sender: TObject);
- var
- i: integer;
- begin
- for i := lvOutlookCats.Items.Count-1 downto 0 do
- if lvOutlookCats.Items[i].Selected then
- lvOutlookCats.Items[i].Delete;
- btDelCat.Enabled := False;
- end;
-
- procedure TfrmOptions.tvOutlookFoldersFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);
- var OutlookFolder: POutlookFolder;
- begin
- OutlookFolder := Sender.GetNodeData(Node);
- if Assigned(OutlookFolder) then
- Finalize(OutlookFolder^)
- end;
-
- procedure TfrmOptions.tvOutlookFoldersGetText(Sender: TBaseVirtualTree;
- Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
- var CellText: WideString);
- var OutlookFolder: POutlookFolder;
- begin
- OutlookFolder := Sender.GetNodeData(Node);
- if Assigned(OutlookFolder) and Assigned(OutlookFolder.Folder) then
- CellText := OutlookFolder.Folder.Name
- else
- CellText := 'Unknown';
- end;
-
- procedure TfrmOptions.tvOutlookFoldersInitChildren(
- Sender: TBaseVirtualTree; Node: PVirtualNode; var ChildCount: Cardinal);
- var OutlookFolder: POutlookFolder;
- begin
- OutlookFolder := Sender.GetNodeData(Node);
- if Assigned(OutlookFolder) and Assigned(OutlookFolder.Folder) then
- ChildCount := OutlookFolder.Folder.Folders.Count
- else
- ChildCount := 0;
- end;
-
- procedure TfrmOptions.tvOutlookFoldersInitNode(Sender: TBaseVirtualTree;
- ParentNode, Node: PVirtualNode;
- var InitialStates: TVirtualNodeInitStates);
- var OutlookFolder, ParentOutlookFolder: POutlookFolder;
- begin
- OutlookFolder := Sender.GetNodeData(Node);
- ParentOutlookFolder := Sender.GetNodeData(ParentNode);
-
- if Assigned(OutlookFolder) then begin
- if Assigned(ParentOutlookFolder) then
- OutlookFolder.Folder := ParentOutlookFolder.Folder.Folders.Item(Node.Index + 1)
- else
- OutlookFolder.Folder := NmSpace.Folders.Item(Node.Index + 1);
-
- if Assigned(OutlookFolder.Folder) then
- if OutlookFolder.Folder.Folders.Count > 0 then
- Include(InitialStates, ivsHasChildren);
- end;
-
- Node.CheckType := ctTriStateCheckBox;
- Include(InitialStates, ivsExpanded);
- end;
-
- procedure TfrmOptions.SaveSelectedOutlookFolder(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
- var OutlookFolder: POutlookFolder;
- begin
- if Node.CheckState = csCheckedNormal then begin
- OutlookFolder := tvOutlookFolders.GetNodeData(Node);
- if Assigned(OutlookFolder) and Assigned(OutlookFolder.Folder) then
- FSelectedOutlookFolders.Add(OutlookFolder.Folder.EntryID);
- end;
- end;
-
- procedure TfrmOptions.LoadSelectedOutlookFolder(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
- var OutlookFolder: POutlookFolder;
- begin
- OutlookFolder := tvOutlookFolders.GetNodeData(Node);
- if Assigned(OutlookFolder) and Assigned(OutlookFolder.Folder) then begin
- if FSelectedOutlookFolders.IndexOf(OutlookFolder.Folder.EntryID) <> -1 then
- tvOutlookFolders.CheckState[Node] := csCheckedNormal
- else
- tvOutlookFolders.CheckState[Node] := csUnCheckedNormal;
- end;
- end;
-
- function TfrmOptions.Get_SelectedOutlookFolders: String;
- begin
- if tvOutlookFolders.RootNodeCount <> 0 then begin
- FSelectedOutlookFolders.Clear;
- tvOutlookFolders.IterateSubtree(nil, SaveSelectedOutlookFolder, nil, [], True);
- end;
- Result := FSelectedOutlookFolders.DelimitedText;
- end;
-
- procedure TfrmOptions.Set_SelectedOutlookFolders(const Value: String);
- var Folder: MAPIFolder;
- begin
- FSelectedOutlookFolders.DelimitedText := Value;
- if tvOutlookFolders.RootNodeCount <> 0 then begin
- if (FSelectedOutlookFolders.DelimitedText = 'DEFAULT') and Assigned(NmSpace) then begin
- Folder := NmSpace.GetDefaultFolder(olFolderContacts);
- if Assigned(Folder) then
- FSelectedOutlookFolders.DelimitedText := Folder.EntryID;
- end;
- tvOutlookFolders.IterateSubtree(nil, LoadSelectedOutlookFolder, nil, [], True);
- end;
- end;
-
- procedure TfrmOptions.FormDestroy(Sender: TObject);
- begin
- FSelectedOutlookFolders.Free;
- end;
-
- procedure TfrmOptions.cbNoProfilesClick(Sender: TObject);
- begin
- if cbNoProfiles.Checked then begin
- cbAutoProfile.Checked := False;
- cbAutoProfile.Enabled := False;
- end
- else
- cbAutoProfile.Enabled := True;
- end;
-
- procedure TfrmOptions.chkStateMonitorClick(Sender: TObject);
- begin
- cbDiagram.Enabled := chkStateMonitor.Checked;
- if not cbDiagram.Enabled then cbDiagram.Checked := False;
- end;
-
- procedure TfrmOptions.tvOutlookFoldersGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode;
- Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var ImageIndex: Integer);
- var
- OutlookFolder: POutlookFolder;
- begin
- OutlookFolder := Sender.GetNodeData(Node);
- if Assigned(OutlookFolder) and Assigned(OutlookFolder.Folder) then
- case OutlookFolder.Folder.DefaultItemType of
- olMailItem: ImageIndex := 1;
- olAppointmentItem: ImageIndex := 2;
- olContactItem: ImageIndex := 3;
- olTaskItem: ImageIndex := 4;
- olJournalItem: ImageIndex := 5;
- olNoteItem: ImageIndex := 6;
- olPostItem: ImageIndex := 7;
- else ImageIndex := 0;
- end
- else
- ImageIndex := -1;
- end;
-
- procedure TfrmOptions.PageControl1Change(Sender: TObject);
- var
- dlg: TfrmStatusDlg;
- sel: string;
- begin
- if (PageControl1.ActivePage = TabSheet11) and (tvOutlookFolders.RootNodeCount = 0) then begin
- dlg := ShowStatusDlg('Reading Outlook Folders...',poMainFormCenter);
- try
- TabSheet11.Update;
- sel := SelectedOutlookFolders;
- tvOutlookFolders.BeginUpdate;
- try
- try
- Outlook := CoOutlookApplication.Create;
- NmSpace := Outlook.GetNamespace('MAPI');
- ReadOutlookFolders;
- except
- Outlook := nil;
- NmSpace := nil;
- tvOutlookFolders.RootNodeCount := 0;
- end;
- SelectedOutlookFolders := sel; // reapply setting in order to select the folder
- SetupNewContactsFolder;
- finally
- tvOutlookFolders.EndUpdate;
- end;
- finally
- dlg.Free;
- end;
- end;
- end;
-
- procedure TfrmOptions.btnLookupDeviceClick(Sender: TObject);
- var
- SockName: TSockAddr;
- i: integer;
- begin
- lblDevice.Caption := 'Searching...';
- lblDevice.Update;
- btnLookupDevice.Enabled := False;
- try
- try
- if rbUseBluetooth.Checked then begin
- WBtSocket.Addr := edBTAddress.Text;
- WBtSocket.Port := edBTPort.Text;
- WBtSocket.Connect;
- if WBtSocket.State = wsConnected then begin
- i := WBtSocket.GetPeerName(SockName,Sizeof(SockName));
- if i <> SOCKET_ERROR then
- lblDevice.Caption := 'Found device: ' + StrPas(@SockName.sa_data[0]);
- WBtSocket.Close;
- if i = SOCKET_ERROR then
- Abort;
- end;
- end;
- if rbUseIRDA.Checked then begin
- with WIrSocket.GetConnectedDevices do
- try
- i := Count;
- if i > 0 then begin
- lblDevice.Caption := 'Found device: ';
- for i := 0 to i-1 do begin
- if i <> 0 then lblDevice.Caption := lblDevice.Caption + ', ';
- lblDevice.Caption := lblDevice.Caption + Items[0].irdaDeviceName;
- end;
- end
- else
- Abort;
- finally
- Free;
- end;
- end;
- if rbUseSerial.Checked then begin
- Form1.TxAndWait('ATI');
- lblDevice.Caption := 'Found device: ' + Form1.FRxBuffer[0];
- {
- Form1.TxAndWait('AT+CGMM');
- lblDevice.Caption := lblDevice.Caption + ' (' + Form1.FRxBuffer[0] + ')';
- }
- end;
- except
- lblDevice.Caption := '';
- end;
- finally
- btnLookupDevice.Enabled := True;
- end;
- end;
-
- procedure TfrmOptions.btnSelectFavBookmClick(Sender: TObject);
- begin
- PBFolderDialog1.Folder := edBookmarkDir.Text;
- if PBFolderDialog1.Execute then
- edBookmarkDir.Text := PBFolderDialog1.Folder;
- end;
-
- procedure TfrmOptions.rbBookmarksClick(Sender: TObject);
- begin
- edBookmarkDir.Enabled := rbBookmarks.ItemIndex <> 0;
- if edBookmarkDir.Enabled then
- edBookmarkDir.Color := clWindow
- else
- edBookmarkDir.Color := clBtnFace;
- btnSelectFavBookm.Enabled := edBookmarkDir.Enabled;
- Label30.Enabled := edBookmarkDir.Enabled;
- Label31.Enabled := edBookmarkDir.Enabled;
- end;
-
- procedure TfrmOptions.cbNoBookmarksClick(Sender: TObject);
- begin
- if cbNoBookmarks.Checked then begin
- cbAutoBookmarks.Checked := False;
- cbAutoBookmarks.Enabled := False;
- end
- else
- cbAutoBookmarks.Enabled := True;
- end;
-
- procedure TfrmOptions.Button5Click(Sender: TObject);
- begin
- cbForceUCS2.Checked := False;
- cbStrictUCScheck.Checked := True;
- end;
-
- procedure TfrmOptions.Button7Click(Sender: TObject);
- begin
- seCommTimeoutSpin.Position := 10;
- sePollingSpin.Position := 30;
- cbDiagram.Checked := True;
- chkStateMonitor.Checked := True;
- chkStateMonitorClick(nil);
- end;
-
- procedure TfrmOptions.Button8Click(Sender: TObject);
- begin
- seMaxPacketSizeSpin.Position := 1024;
- cbNoIRMC.Checked := False;
- cbNoObex.Checked := False;
- cbNoObexClick(nil);
- end;
-
- procedure TfrmOptions.Button9Click(Sender: TObject);
- begin
- rbOutlookNewAction.ItemIndex := 0;
- cbOutlookAllCategories.Checked := True;
- cbOutlookAllCategoriesClick(nil);
- end;
-
- procedure TfrmOptions.lvOutlookCatsSelectItem(Sender: TObject;
- Item: TListItem; Selected: Boolean);
- begin
- btDelCat.Enabled := lvOutlookCats.SelCount <> 0;
- end;
-
- function TfrmOptions.Get_OutlookCategories: WideString;
- var
- i: integer;
- begin
- Result := '';
- for i := 0 to lvOutlookCats.Items.Count-1 do begin
- if Result <> '' then Result := Result + ';';
- Result := Result + WideQuoteStr(lvOutlookCats.Items[i].Caption);
- end;
- end;
-
- procedure TfrmOptions.Set_OutlookCategories(const Value: WideString);
- var
- w: WideString;
- begin
- w := Value;
- lvOutlookCats.Items.Clear;
- while w <> '' do begin
- with lvOutlookCats.Items.Add do begin
- Caption := GetFirstToken(w,';');
- ImageIndex := 0;
- end;
- end;
- end;
-
- procedure TfrmOptions.Button10Click(Sender: TObject);
- var
- i: integer;
- begin
- rgExplorer.ItemIndex := 0;
- for i := 0 to gbOnConnecting.ControlCount-1 do
- if gbOnConnecting.Controls[i] is TCheckBox then
- (gbOnConnecting.Controls[i] as TCheckBox).Checked := False;
- for i := 0 to gbOnConnected.ControlCount-1 do
- if gbOnConnected.Controls[i] is TCheckBox then
- (gbOnConnected.Controls[i] as TCheckBox).Checked := False;
- end;
-
- procedure TfrmOptions.cbAutoBookmarksClick(Sender: TObject);
- begin
- if cbAutoBookmarks.Checked then begin
- MessageBeep(MB_ICONASTERISK);
- MessageDlg('Bookmark synchronization is not implemented yet!',
- mtInformation,[mbOk],0);
- cbAutoBookmarks.Checked := False;
- end;
- end;
-
- procedure TfrmOptions.btnRefreshOutlookFoldersClick(Sender: TObject);
- var
- seld,newc: string;
- begin
- btnRefreshOutlookFolders.Enabled := False;
- seld := SelectedOutlookFolders;
- newc := OutlookNewContactsFolder;
- tvOutlookFolders.RootNodeCount := 0;
- Outlook := nil;
- NmSpace := nil;
- tvOutlookFolders.Update;
- tvOutlookFolders.BeginUpdate;
- try
- try
- Outlook := CoOutlookApplication.Create;
- NmSpace := Outlook.GetNamespace('MAPI');
- ReadOutlookFolders;
- except
- Outlook := nil;
- NmSpace := nil;
- tvOutlookFolders.RootNodeCount := 0;
- end;
- // reapply current setting
- SelectedOutlookFolders := seld;
- OutlookNewContactsFolder := newc;
- SetupNewContactsFolder;
- finally
- tvOutlookFolders.EndUpdate;
- btnRefreshOutlookFolders.Enabled := True;
- end;
- end;
-
- procedure TfrmOptions.Button12Click(Sender: TObject);
- begin
- SelectedOutlookFolders := 'DEFAULT';
- // this will reset OutlookNewContactsFolder as well
- SetupNewContactsFolder;
- end;
-
- procedure TfrmOptions.tvOutlookFoldersPaintText(Sender: TBaseVirtualTree;
- const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
- TextType: TVSTTextType);
- var OutlookFolder: POutlookFolder;
- begin
- OutlookFolder := Sender.GetNodeData(Node);
-
- if Assigned(OutlookFolder) and OutlookFolder.NewContacts then
- TargetCanvas.Font.Style := TargetCanvas.Font.Style + [fsBold];
- end;
-
- procedure TfrmOptions.mniNewContactsClick(Sender: TObject);
- var OutlookFolder: POutlookFolder;
- begin
- if Assigned(NewOutlookNewContactsNode) and (NewOutlookNewContactsNode <> OutlookNewContactsNode) then begin
- OutlookFolder := tvOutlookFolders.GetNodeData(NewOutlookNewContactsNode);
-
- if Assigned(OutlookFolder) then begin
- OutlookFolder.NewContacts := True;
-
- // Reset old
- if Assigned(OutlookNewContactsNode) then begin
- OutlookFolder := tvOutlookFolders.GetNodeData(OutlookNewContactsNode);
-
- if Assigned(OutlookFolder) then begin
- OutlookFolder.NewContacts := False;
-
- tvOutlookFolders.InvalidateNode(OutlookNewContactsNode);
- end;
- end;
-
- OutlookNewContactsNode := NewOutlookNewContactsNode;
- end;
- end;
- end;
-
- procedure TfrmOptions.pmuOutlookFolderPopup(Sender: TObject);
- var
- Pos: TPoint;
- begin
- Pos := tvOutlookFolders.ScreenToClient(Mouse.CursorPos);
- NewOutlookNewContactsNode := tvOutlookFolders.GetNodeAt(Pos.X, Pos.Y);
-
- mniNewContacts.Enabled := Assigned(NewOutlookNewContactsNode) and (NewOutlookNewContactsNode.CheckState = csCheckedNormal);
- end;
-
- procedure TfrmOptions.SetupNewContactsFolder;
- begin
- OutlookNewContactsNode := nil;
- tvOutlookFolders.IterateSubtree(nil, LoadOutlookNewContactsFolder, nil, [], True);
- // No folder selected, pick a default one
- if not Assigned(OutlookNewContactsNode) then
- tvOutlookFolders.IterateSubtree(nil, PickDefaultOutlookNewContactsFolder, nil, [], True);
- end;
-
- procedure TfrmOptions.SetOutlookNewContactsFolder(const Value: String);
- begin
- FOutlookNewContactsFolder := Value;
-
- SetupNewContactsFolder;
- end;
-
- function TfrmOptions.GetOutlookNewContactsFolder: String;
- var OutlookFolder: POutlookFolder;
- begin
- if Assigned(OutlookNewContactsNode) then begin
- OutlookFolder := tvOutlookFolders.GetNodeData(OutlookNewContactsNode);
-
- if Assigned(OutlookFolder) then
- Result := OutlookFolder.Folder.EntryID;
- end;
- end;
-
- procedure TfrmOptions.LoadOutlookNewContactsFolder(
- Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer;
- var Abort: Boolean);
- var OutlookFolder: POutlookFolder;
- begin
- OutlookFolder := tvOutlookFolders.GetNodeData(Node);
- if Assigned(OutlookFolder) and Assigned(OutlookFolder.Folder) then begin
- OutlookFolder.NewContacts := OutlookFolder.Folder.EntryID = FOutlookNewContactsFolder;
- if OutlookFolder.NewContacts then
- OutlookNewContactsNode := Node;
- end;
- end;
-
- procedure TfrmOptions.PickDefaultOutlookNewContactsFolder(
- Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer;
- var Abort: Boolean);
- var OutlookFolder: POutlookFolder;
- begin
- OutlookFolder := tvOutlookFolders.GetNodeData(Node);
- if (Node.CheckState = csCheckedNormal) and Assigned(OutlookFolder) and Assigned(OutlookFolder.Folder) then begin
- FOutlookNewContactsFolder := OutlookFolder.Folder.EntryID;
- OutlookFolder.NewContacts := True;
- OutlookNewContactsNode := Node;
- Sender.InvalidateNode(Node);
- Abort := True;
- end;
- end;
-
- procedure TfrmOptions.tvOutlookFoldersChecked(Sender: TBaseVirtualTree;
- Node: PVirtualNode);
- var OutlookFolder: POutlookFolder;
- begin
- OutlookFolder := tvOutlookFolders.GetNodeData(Node);
-
- if (Node.CheckState = csCheckedNormal) and Assigned(OutlookFolder) and (OutlookNewContactsNode = nil) then begin
- OutlookFolder.NewContacts := True;
- OutlookNewContactsNode := Node;
- Sender.InvalidateNode(Node);
- end
- else if (Node.CheckState = csUnCheckedNormal) and Assigned(OutlookFolder) and OutlookFolder.NewContacts then begin
- OutlookFolder.NewContacts := False;
- OutlookNewContactsNode := nil;
- Sender.InvalidateNode(Node);
- Sender.IterateSubtree(nil, PickDefaultOutlookNewContactsFolder, nil, [], True);
- end;
- end;
-
- procedure TfrmOptions.cbNoIRMCClick(Sender: TObject);
- begin
- if cbNoIRMC.Checked then begin
- { If no irmcSync, disable Outlook too }
- MessageBeep(MB_ICONASTERISK);
- MessageDlg('Outlook synchronization requires IRMC Sync, so this feature will be disabled as well!',
- mtInformation,[mbOk],0);
- cbAutoOutlookSync.Enabled := False;
- cbAutoOutlookSync.Checked := False;
- end
- else begin
- cbAutoOutlookSync.Enabled := True;
- end;
- end;
-
- end.
-